package br.com.imob.dao;

import br.com.imob.modelo.Agenda;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 14:48:28 01/02/2011 2011
 *  @version 
 */

public class AgendaDao extends GenericDao {

	public AgendaDao() {  }
	
	public Integer adicionarAgenda(Agenda agenda) {
		saveOrUpdatePojo(agenda);
		return agenda.getAgendaId();
	}
	
	public void removerAgenda(Agenda agenda) {
		removerPojo(agenda);
	}

	/* Precisa definir o ID */
	public void atualizarAgenda(Agenda recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarAgenda(Agenda recuperar, Agenda alterar) {
		recuperar = retriveAgenda(recuperar);
		
		if(alterar.getAgendaTitulo() != null)
			recuperar.setAgendaTitulo(alterar.getAgendaTitulo());
		if(alterar.getAgendaDescricao() != null)
			recuperar.setAgendaDescricao(alterar.getAgendaDescricao());
		if(alterar.getDataInicio() != null)
			recuperar.setDataInicio(alterar.getDataInicio() );
		if(alterar.getDataFim() != null)
			recuperar.setDataFim(alterar.getDataFim() );
		if(alterar.getHoraInicio() != null)
			recuperar.setHoraInicio(alterar.getHoraInicio() );
		if(alterar.getHoraFim() != null)
			recuperar.setHoraFim(alterar.getHoraFim() );
		
		saveOrUpdatePojo(recuperar);
	}
	
	
	/**
	 * Editar um Agenda
	 * @param String oldAgenda
	 * @param String newAgenda
	 */
	public void atualizarAgenda(String tpStr, String oldAgenda, String newAgenda ) {
		
		if( "titulo".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAgenda) && oldAgenda != null )
					&& ( !"".equalsIgnoreCase(newAgenda) && newAgenda != null ) ) 
				atualizarAgenda( getAgendaQNamedTitulo(oldAgenda), new Agenda(tpStr, newAgenda) );
		}
		
		if( "descricao".equalsIgnoreCase(tpStr) ) {
			if ( ( !"".equalsIgnoreCase(oldAgenda) && oldAgenda != null )
					&& ( !"".equalsIgnoreCase(newAgenda) && newAgenda != null ) ) 
				atualizarAgenda( getAgendaQNamedDesc(oldAgenda), new Agenda(tpStr, newAgenda) );
		}
	}
	
	
	
//	Artificio para Recuperar a Tupla de Agenda
	protected Agenda retriveAgenda(Agenda recuperar) {
		if(recuperar.getAgendaId() == null)
			return getAgendaQNamedTitulo(recuperar.getAgendaTitulo());
		else 
			return getAgenda(recuperar.getAgendaId());
	}
	
	
//	Consultas
	public Agenda getAgenda(Integer key) {
		return getPojoByID(Agenda.class, key);
	}
	public Agenda getAgendaByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Agenda getAgendaQNamedTitulo(String fltrTitulo) {
		return getPojoByQNamed("Agenda.findByAgendaTitulo", fltrTitulo);
	}
	public Agenda getAgendaQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("Agenda.findByAgendaDescricao", fltrDesc);
	}
	
//	Listas
	public List<Agenda> getAgendas() {
		return (List<Agenda>) getALL(Agenda.class);
	}
	public List<Agenda> getAgendasQNamedTituloPRX(String fltrTitulo) {
		return getListByQNamedPRX("Agenda.findLikeByAgendaTitulo", fltrTitulo);
	}
	public List<Agenda> getAgendasQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("Agenda.findLikeByAgendaDescricao", fltrDesc);
	}
	public List<Agenda> getAgendasQNamedDtInit(String fltrDtInit) {
		return getListByQNamed("Agenda.findByDataInicio", fltrDtInit);
	}
	public List<Agenda> getAgendasQNamedDtFim(String fltrDtFim) {
		return getListByQNamed("Agenda.findByDataFim", fltrDtFim);
	}
	public List<Agenda> getAgendasQNamedHoraInit(String fltrHrInit) {
		return getListByQNamed("Agenda.findByHoraInicio", fltrHrInit);
	}
	public List<Agenda> getAgendasQNamedHoraFim(String fltrHrFim) {
		return getListByQNamed("Agenda.findByHoraFim", fltrHrFim);
	}
	public List<Agenda> getAgendasByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}

}